﻿CREATE PROCEDURE [dbo].[DisgatherGoodsDelete] --Удаление разборки товара
(
	@Original_Id int,						--идентификатор документа по разборке товара
	@Original_MD datetime
)
AS
DECLARE @strMsg nvarchar(500), @intErrCode int, @intRet int
--DECLARE @intSrcGoodsDoclineId int,	@MD datetime

SET NOCOUNT ON

IF (@Original_Id Is Null) OR (@Original_MD Is Null)
BEGIN
	SELECT @intErrCode = 1, @strMsg = 'Неправильные параметры в вызове процедуры ' + Object_Name(@@Procid) + ' !'
	RAISERROR (@strMsg, 11, @intErrCode)
	RETURN @intErrCode
END

SELECT @intErrCode = DocTypeId FROM [CA].[Documents] WHERE Id = @Original_Id AND MD = @Original_MD
IF (@@rowcount <> 1)
BEGIN
	SELECT @intErrCode = 2, 
	@strMsg = 'Данные изменены после последнего запроса!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

IF (@intErrCode <> 12)
BEGIN
	SELECT @intErrCode = 3, @strMsg = 'Неправильный тип документа !'
	RAISERROR (@strMsg, 11, @intErrCode)
	RETURN @intErrCode
END

--проверить товародвижение по партиям
IF EXISTS (SELECT TOP 1 L.Id 
FROM CD.Parties AS P INNER JOIN CA.GoodsDocLines AS L ON P.Id = L.PartyId
WHERE (P.DocId = @Original_Id) AND (L.DocId <> @Original_Id) )
BEGIN
	SELECT @intErrCode = 4, 
	@strMsg = 'По партиям, созданным при разборке, было движение товаров!'
	RAISERROR (@strMsg, 11, @intErrCode)
	RETURN @intErrCode
END

BEGIN TRAN
--удаляются все проводки по документу
DELETE FROM [CA].[GoodsDocLines] WHERE DocId = @Original_Id
	SELECT @intRet = @@rowcount, @intErrCode = @@error
	IF (@intErrCode <> 0)
	BEGIN
		IF @@trancount > 0 ROLLBACK TRAN
		RETURN @intErrCode
	END
	IF (@intRet < 1)
	BEGIN
		IF @@trancount > 0 ROLLBACK TRAN
		SELECT @intErrCode = 5, 
		@strMsg = 'Строки товародвижения не удалены!'
		RAISERROR (@strMsg, 11, 1)
		RETURN @intErrCode
	END

DELETE FROM CD.Parties WHERE DocId = @Original_Id
	
	SELECT @intRet = @@rowcount, @intErrCode = @@error
	IF (@intErrCode <> 0)
	BEGIN
		IF @@trancount > 0 ROLLBACK TRAN
		RETURN @intErrCode
	END
	IF (@intRet < 1)
	BEGIN
		IF @@trancount > 0 ROLLBACK TRAN
		SELECT @intErrCode = 6, 
		@strMsg = 'Партии, созданные при разборке товара не удалены!'
		RAISERROR (@strMsg, 11, 1)
		RETURN @intErrCode
	END

	SET NOCOUNT OFF;
DELETE FROM [CA].[Documents] WHERE Id = @Original_Id

SELECT @intRet = @@rowcount, @intErrCode = @@error
IF (@intErrCode <> 0)
BEGIN
	IF @@trancount > 0 ROLLBACK TRAN
	RETURN @intErrCode
END
IF (@intRet <> 1)
BEGIN
	IF @@trancount > 0 ROLLBACK TRAN
	SELECT @intErrCode = 7, 
	@strMsg = 'Докумет по разборке товара не удален!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

COMMIT TRAN
	
RETURN 0

